/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package tictactoe;

/**
 *
 * @author renew
 */
public class Main {

    public static Element[][] Feld = new Element[3][3];
    static boolean turn;
    static boolean draw;
    static boolean ai_use=true;
    static boolean ai_turn;
    static int count;

    static void output(){
        Element f;
        System.out.println("-------");
        for(int i=0; i<3; i++){
            for(int j=0; j<3; j++){
                f = Feld[i][j];
                System.out.print("|");
                if (f==null) System.out.print(" ");
                else System.out.print(f.cross? "x" : "o");
            }
            System.out.println("|");
            System.out.println("-------");
        }
    }

    static void action(int x, int y){
        Feld[x][y] = new Element(turn);
        turn = !turn;
        ai_turn = !ai_turn;
        output();
        gui.refresh(Feld);
        count++;
        gui.startWith.setVisible(false);
        gui.ai.setVisible(false);
        if(checkGameOver()) {
            GameOverMessage();
            return;
        }
        if(ai_turn && ai_use) ai.move();
    }

    static boolean checkGameOver(){
        if (checkH()|checkV()|checkD()) return true;
        if (count==9){
            draw=true;
            return true;
        }
        return false;
    }
    static boolean checkH(){
        if (Feld[0][0]!=null & Feld[0][1]!=null & Feld[0][2]!=null){
            if (Feld[0][0].cross==Feld[0][1].cross && Feld[0][0].cross==Feld[0][2].cross) return true;
        }
        if (Feld[1][0]!=null & Feld[1][1]!=null & Feld[1][2]!=null){
            if (Feld[1][0].cross==Feld[1][1].cross && Feld[1][0].cross==Feld[1][2].cross) return true;
        }
        if (Feld[2][0]!=null & Feld[2][1]!=null & Feld[2][2]!=null){
            if (Feld[2][0].cross==Feld[2][1].cross && Feld[2][0].cross==Feld[2][2].cross) return true;
        }
        return false;
    }
    static boolean checkV(){
        if (Feld[0][0]!=null & Feld[1][0]!=null & Feld[2][0]!=null){
            if (Feld[0][0].cross==Feld[1][0].cross && Feld[0][0].cross==Feld[2][0].cross) return true;
        }
        if (Feld[0][1]!=null & Feld[1][1]!=null & Feld[2][1]!=null){
            if (Feld[0][1].cross==Feld[1][1].cross && Feld[0][1].cross==Feld[2][1].cross) return true;
        }
        if (Feld[0][2]!=null & Feld[1][2]!=null & Feld[2][2]!=null){
            if (Feld[0][2].cross==Feld[1][2].cross && Feld[0][2].cross==Feld[2][2].cross) return true;
        }
        return false;
    }
    static boolean checkD(){
        if (Feld[1][1]==null) return false;

        if (Feld[0][0]!=null & Feld[2][2]!=null){
            if (Feld[0][0].cross==Feld[1][1].cross && Feld[0][0].cross==Feld[2][2].cross) return true;
        }
        if (Feld[0][2]!=null & Feld[2][0]!=null){
            if (Feld[0][2].cross==Feld[1][1].cross && Feld[0][2].cross==Feld[2][0].cross) return true;
        }
        return false;
    }

    static void GameOverMessage(){
        for(int i=0;i<3;i++){
            for(int j=0;j<3;j++){
                gui.f[i][j].setVisible(false);
            }
        }

        gui.gameOver.setVisible(true);
        if (draw){
            gui.winner.setText("Unentschieden!!");
            System.out.println("Unentschieden!!");
        }else{
            String text = !turn? "x " : "o ";
            text += "gewinnt das Spiel";
            System.out.println("Game over:");
            System.out.println(text);
            gui.winner.setText(text);
        }
    }

    static void newGame(){
        gui.ai.setVisible(true);
        gui.winner.setText("");
        gui.gameOver.setVisible(false);
        count=0;
        draw=false;
        turn = true;
        ai_turn = false;
        gui.startWith.setText(Main.turn? "x" : "o");
        gui.startWith.setVisible(true);
        for(int i=0;i<3;i++){
            for(int j=0;j<3;j++){
                Feld[i][j] = null;
            }
        }
        gui.refresh(Feld);
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

        output();
        gui.init();
        newGame();

        //TODO AI-Random -> besiegbarkeit


    }

}
